/*既然链表不能包含万物，就让万物(容器)来包含链表*/
#include <linux/list.h>
#include <linux/kernel.h>
#include <linux/module.h>

typedef struct Date//保存链表的容器
{
    struct list_head list;
    int num;
} my_list;
static int kernellist_init(void)
{
    my_list head, *pos, *n;
    my_list list[5];
    int i = 0;
    /*初始化，必须*/
    INIT_LIST_HEAD(&head.list);
    /*list_add,插入，list_add_tail:尾插*/

    for (; i < 5; ++i)
    {
        list[i].num = i * 10;
        list_add(&list[i].list, &head.list);
    }
    /*遍历(宏函数)：list_for_each_entry:list_for_each + list_entry*/
    /*安全版本：list_for_each_entry_safe(如果删除了节点，一定要用这个)*/
    /*pos:用于保存容器的位置，n:容器类型指针,head:头，list:链表名*/
    list_for_each_entry_safe(pos, n, &head.list, list)
    {
        printk("%d\n", pos->num);
    }
    /*删除节点*/
    list_del(&list[3].list);
    list_for_each_entry_safe(pos, n, &head.list, list)
    {
        printk("%d\n", pos->num);
    }
    printk("模块加载\n");
    return 0;
}
static void kernellist_exit(void)
{
    printk("模块卸载\n");
}

module_init(kernellist_init);
module_exit(kernellist_exit);
MODULE_LICENSE("GPL");
